package com.plantpoint.util;

import com.plantpoint.entity.bean.Image;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.FileSystemException;
import java.util.UUID;

/**
 * @author ATSELI
 * @version 1.0
 * @date 2021/4/23 23:27
 */

@Component
public class UploadImageUtil {
    public Image addImg(MultipartFile file, String openid, String id){
        int index = 0;
        String suffix = null;
        // 获取当前系统的斜杠类型
        char slash = File.separatorChar;
        if (file.isEmpty()){
            throw new RuntimeException("文件不能为空");
        }
        //拿到图片的原始名称,即在客户机上储存的名称
        String originalFilename = file.getOriginalFilename();
        if (originalFilename != null) {
            //找到最后一个为"."的字符的索引
            index = originalFilename.lastIndexOf(".");
        }else {
            throw new RuntimeException("路径名不能为空");
        }
        // String.substring(index + 1)拿到(index + 1)索引后面的所有内容
        if (index == -1 || (suffix = originalFilename.substring(index + 1)).isEmpty()){
            throw new RuntimeException("文件后缀不能为空");
        }
        //确保传入的文件为图片
        if (!("jpg".equals(suffix) || "jpeg".equals(suffix) || "png".equals(suffix))){
            throw new RuntimeException("请传入图片");
        }

        // 获取文件的MD5值
        // String md5 = FileMd5Util.getImageMd5(file);


        // 获取当前项目的路径地址
        String url = System.getProperty("user.dir");

        System.out.println("user.dir ================> " + url);


        // 设置路径
        String finalUrl = openid != null
                ? new File(url).getParent() + slash + "userImg" + slash + openid + slash + id + slash + UUID.randomUUID().toString().replace("-", "") + "." + suffix
                : new File(url).getParent() + slash + "entryImg" + slash + id + slash + UUID.randomUUID().toString().replace("-", "") + "." + suffix;
        File staticImgFile = new File(finalUrl);

        // 判断该文件夹是否存在
        if (!staticImgFile.exists()){
            if (!staticImgFile.mkdirs()){
                throw new RuntimeException("文件创建失败");
            }
        }

        Image image = new Image(null, id, finalUrl, System.currentTimeMillis() / 1000);

        // 将文件存入对应的文件夹中
        try {
            file.transferTo(staticImgFile);
        } catch (Exception e){
            throw new RuntimeException("保存文件出错");
        }

        /**
         //使用ImageIO判断传入的是否是图片
         Set<String> allowSuffix = new HashSet<String>(Arrays.asList("jpg", "jpeg", "png", "gif"));
         // 判断传入文件后缀是否包含在允许后缀列表中
         if (!allowSuffix.contains(suffix.toLowerCase())){
         return "非法的文件,不允许的文件类型: " + suffix;
         }
         // 临时文件
         File tempFile = new File(System.getProperty("java.io.tmpdir"), originalFilename);

         try {
         // 先把文件序列化到临时目录
         file.transferTo(tempFile);
         try {
         // 尝试IO文件，判断文件的合法性
         BufferedImage bufferedImage = ImageIO.read(tempFile);
         bufferedImage.getWidth();
         bufferedImage.getHeight();
         } catch (Exception e) {
         // IO异常，不是合法的图片文件，返回异常信息
         return "文件不是图片文件";
         }
         // 复制到到上传目录
         FileCopyUtils.copy(new FileInputStream(tempFile), Files.newOutputStream(Paths.get("D://upload", originalFilename), StandardOpenOption.CREATE_NEW));
         // 返回相对访问路径
         return  "/" + UriUtils.encode(originalFilename, StandardCharsets.UTF_8);
         } finally {
         // 响应客户端后，始终删除临时文件
         tempFile.delete();
         }

         */

        return image;
    }
}
